#include <iostream>
#include <set>
#include <map>
#include <string>

using namespace std;

void TestSet1()
{
    set<int> s;
    s.insert(4);
    s.insert(2);
    s.insert(6);
    s.insert(3);
    s.insert(4);
    s.insert(5);
    set<int>::iterator it = s.begin();
    while(it != s.end())
    {
        cout << *it << " ";
        it++;
    }
    cout << endl;
    
    auto ret = s.find(4);
    if(ret != s.end())
    {
        s.erase(ret);
    }
    s.erase(3);
    for(auto e: s)
    {
        cout << e << " ";
    }
    cout << endl;
    
}

void TestMap1()
{
    map<string, string> dict;
    dict.insert(pair<string, string>("sort", "排序"));
    dict.insert(make_pair("apple", "苹果"));
    
    auto it = dict.begin();
//    while(it != dict.end())
//    {
//        cout << (*it).first << ":" << (*it).second << " ";
//        it++;
//    }
//    cout << endl;
    while(it != dict.end())
    {
        cout << it->first << ":" << it->second << " ";      //编译器为了可读性而省略了一个➡️
        it++;
    }
    cout << endl;
}

void TestMap2()     //利用map统计单词出现次数
{
    string str[] = {"hello", "hello", "hello", "world", "world", "apple", "hello"};
    map<string, int> countMap;
    
//    for(auto &e: str)
//    {
//        auto ret = countMap.find(e);
//        if(ret == countMap.end())
//        {
//            countMap.insert(make_pair(e, 1));
//        }
//        else
//        {
//            ret->second++;
//        }
//    }
    
    for(auto &e: str)       //改良版
    {
        countMap[e]++;      //第一次来的key会插入，val给缺省值0，然后val再++
    }
    
    for(auto &kv: countMap)
    {
        cout << kv.first << ":" << kv.second << endl;
    }
}

int main()
{
    //TestSet1();
//    TestMap1();
    TestMap2();
    return 0;
}
